import {navApi} from "@/api/blog/navApi";
import { RouteRecordRaw } from 'vue-router'

// Vite确实不支持完全动态的导入，这是因为Vite需要在构建时知道所有可能的导入路径以进行预构建。
// 但是，您可以使用import.meta.glob（）来导入所有可能的模块，然后在运行时进行动态查找。
const views = import.meta.glob('@/view/**/*.vue')
/**
 * 加载视图
 * @param component
 */
function loadView(component: string) {
    if (!component) return null
    const key = Object.keys(views).find(k => k.includes(component))
    return key ? views[key] : null
}

/**
 * 创建路由
 * @param menuList
 */
function createRouter(menuList: Menu[]) {
    const modules: Array<RouteRecordRaw> = []
    if (!menuList || menuList.length === 0){
        return modules
    }
    menuList.forEach((item: Menu) => {
        const module: RouteRecordRaw = {
            path: item.path || '',
            name: item.navName,
            component: loadView(item.component || ''),
            children: (item.subNavList && item.subNavList.length > 0) ? createRouter(item.subNavList) : [],
            redirect: (item.subNavList && item.subNavList.length > 0) ? item.subNavList[0].path : ''
        }
        modules.push(module)
    })
    return modules
}

/**
 * 获取菜单列表
 */
async function getMenuList () {
    let menuList: Menu[] = []
    await navApi.getNavTreeList().then((res) => {
        menuList = res.data
    })
    return menuList
}

export async function initMenuArray () {
    return createRouter(await getMenuList());
}

export default await initMenuArray()
